﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Linq;
using System.Text;

namespace CityGames
{
    public class Socio
    {
        private string nombre;
        private string apellidos;
        private string dni;
        private string sexo; 
        private DateTime fecha;
        private string direccion;
        private string localidad;
        private string provincia;
        private string cp;
        private string telefono;
        private string email;
        private string foto;
        //Web
        private string nick;
        private string password;
        private string avatar;

        public string Nombre
        {
            get { return nombre; }
            set { nombre = value; }
        }

        public string Apellidos
        {
            get { return apellidos; }
            set { apellidos = value; }
        }

        public string Dni
        {
            get { return dni; }
            set { dni = value; }
        }

        public string Sexo
        {
            get { return sexo; }
            set { sexo = value; }
        }

        public DateTime Fecha
        {
            get { return fecha; }
            set { fecha = value; }
        }

        public string Direccion
        {
            get { return direccion; }
            set { direccion = value; }
        }

        public string Localidad
        {
            get { return localidad; }
            set { localidad = value; }
        }

        public string Provincia
        {
            get { return provincia; }
            set { provincia = value; }
        }

        public string CP
        {
            get { return cp; }
            set { cp = value; }
        }

        public string Telefono
        {
            get { return telefono; }
            set { telefono = value; }
        }

        public string Email
        {
            get { return email; }
            set { email = value; }
        }

        public string Foto
        {
            get { return foto; }
            set { foto = value; }
        }

        //Web
        public string Nick
        {
            get { return nick; }
            set { nick = value; }
        }

        //Web
        public string Password
        {
            get { return password; }
            set { password = value; }
        }

        //Web
        public string Avatar
        {
            get { return avatar; }
            set { avatar = value; }
        }


        static private CADSocio cadSocio = new CADSocio();
        
        public Socio()
        {
            try
            {
                nombre = "";
                apellidos ="";
                dni ="";
                sexo ="";
                fecha=DateTime.Today;
                direccion="";
                localidad="";
                provincia="";
                cp="";
                telefono="";
                email="";
                foto = "";
                //Web
                nick = "";
                password = "";
                avatar = "/avatares/user.png";
            }
            catch(Exception ex)
            {
                throw ex;
            }
    
        }

        public DataSet FiltrarSocios(string nombre, string apellidos, string dni, string sexo, int desde, int hasta)
        {
            DataSet resultado = new DataSet();

            try
            {
                resultado = cadSocio.FiltrarSocios(nombre, apellidos, dni, sexo, desde, hasta);
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return resultado;
        }

        public int ObtenerNumeroDeSociosFiltrados(string nombre, string apellidos, string dni, string sexo)
        {
            int resultado = 0;

            try
            {
                resultado = cadSocio.ObtenerNumeroDeSociosFiltrados(nombre, apellidos, dni, sexo);
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return resultado;
        }

        public bool UpdateSocio(DataRow dr)
        {
            bool resultado = false;

            try
            {
                resultado = cadSocio.UpdateSocio(dr);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return resultado;
            
        }

        public bool BorrarSocio(string dni)
        {
            bool resultado = false;

            try
            {
                resultado = cadSocio.BorrarSocio(dni);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return resultado;
        
        }
        /* FUNCION SUT!! */
        public string ObtenerNombreSocio(string DNI)
        {
            string nombreyApellido;

            try
            {
                nombreyApellido = cadSocio.getNombreyApellidos(DNI);
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return nombreyApellido;
        }
        public string ObtenerRutaFoto(string DNI)
        {
            string ruta;

            try
            {
                ruta = cadSocio.ObtenerRutaFoto(DNI);
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return ruta;
        }

        public DataSet ObtenerDatosSocio(string dni)
        {
            DataSet datosSocio = new DataSet();

            try
            {
                datosSocio = cadSocio.ObtenerDatosSocio(dni);
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return datosSocio;
        }

        public bool InsertarSocio()
        {
            bool resultado = true;

            try
            {
                resultado = cadSocio.InsertarSocio(nombre, apellidos, dni, sexo, fecha, direccion, localidad, provincia, cp, telefono, email, foto);
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return resultado;
        } 

        public bool ExisteSocio(string dni, string letra)
        {
            bool resultado = true;
            try
            {
                resultado = cadSocio.ExisteSocio(dni, letra);
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return resultado;
        }

        /**************************************************Funciones de Ruben **************************************************/

        /// <summary>
        /// Función que devuelve la deuda de un socio
        /// </summary>
        /// <param name="dni">
        /// El dni del socio del cual se quiere saber la deuda</param>        
        /// <returns>
        /// La deuda del socios</returns>
        public double ObtenerDeuda(string dni)
        {
            double deuda = 0;

            try
            {
                deuda = cadSocio.getDeuda(dni);
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return deuda;
        }

        /// <summary>
        /// Función que añade una cantidad a la deuda de un socio
        /// </summary>
        /// <param name="deudaMas">
        /// La cantidad que se desea incrementar la deuda</param>
        /// <param name="dni">
        /// El dni del socio</param>
        /// <returns>
        /// Un booleano que indica si se ha incrementado la deuda correctamente</returns>
        public bool SumarADeuda(decimal deudaMas, string dni)
        {
            bool ok = false;

            try
            {
                ok = cadSocio.SumarADeuda(deudaMas, dni);
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return ok;
        }

        /// <summary>
        /// Función que ejecuta la consulta pasada por parámetro en Modo Desconectado y devuelve un DataSet con el resultado en una tabla denominada con el nombre especificado
        /// </summary>
        /// <param name="dni">
        /// El dni del socio</param>        
        /// <returns>
        /// Devuelve un booleano que indica si se ha borrado la deuda correctamente</returns>
        public bool DeudaACero(string dni)
        {
            bool ok = false;

            try
            {
                ok = cadSocio.DeudaACero(dni);
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return ok;
        }
        
        /**************************************************Fin Funciones de Ruben **************************************************/


        // Gonzalo Web
        public Socio DatosSocio(string dni)
        {
            try
            {
                cadSocio.DatosSocio(ref dni, ref nombre, ref apellidos, ref nick, ref password, ref email, ref avatar, ref sexo, ref localidad, ref provincia, ref direccion, ref cp, ref telefono);
                this.Dni = dni;
                this.Nombre = nombre;
                this.Apellidos = apellidos;
                this.Nick = nick;
                this.Password = password;
                this.Email = email;
                this.Avatar = avatar;
                this.Sexo = sexo;
                this.Localidad = localidad;
                this.Provincia = provincia;
                this.Direccion = direccion;
                this.CP = cp;
                this.Telefono = telefono;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return this;
        }

        public bool InsertarSocioWeb()
        {
            bool resultado = true;

            try
            {
                resultado = cadSocio.InsertarSocioWeb(nombre, apellidos, dni, nick, password, email, avatar, sexo, direccion, cp, localidad, provincia, telefono);          
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return resultado;
        }

        public bool UpdateSocioWeb()
        {
            bool resultado = true;

            try
            {
                resultado = cadSocio.UpdateSocioWeb(nombre, apellidos, dni, nick, email, avatar, sexo, direccion, cp, localidad, provincia, telefono);
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return resultado;
        } 

        /*-----------------------------Mirellys Parte Web*/
        public string GetPasswordSocio()
        {
            string resultado;

            try
            {
                resultado = cadSocio.getPasswordSocio(dni);
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return resultado;
        }

        public bool ExisteSocioWeb()
        {
            bool resultado;

            try
            {
                resultado = cadSocio.ExisteSocioWeb(dni);
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return resultado;
        }
    }
}
